from abc import ABC, abstractmethod
from typing import Dict, List, Tuple


class BaseModel(ABC):
    def __init__(self):
        self.suppress_output = False
        
    def __del__(self):
        self.deleteChat()
        
    @abstractmethod
    def setModelName(self, model_name:str):
        pass
        
    @abstractmethod
    def chat(self, messages:List[Dict[str, str]]) ->str:
        pass
        
    @abstractmethod
    def upload_files(self, file_list:List[str]) ->List[Dict]:
        pass

    @abstractmethod
    def name(self) ->str:
        pass

    @abstractmethod
    def deleteChat(self) -> bool:
        pass

    @abstractmethod
    def getModelList(self) ->List[Tuple[str, str]]:
        pass

    def setSuppressOutput(self, suppress: bool):
        self.suppress_output = suppress

                
 
        